<?php

namespace App\Api\Controllers\V1;

use App\Api\Transformers\WallpaperCategoryTransformer as Transformer;
use App\Api\Model\WallpaperCategoryModel as Model;
use Dingo\Api\Http\Request;

class WallpaperCategoryController extends BaseController {
    /**
     * 查询
     * @param $_id
     * @return \Dingo\Api\Http\Response
     */
    public function find($_id = NULL){
        if (!empty($_id)){
            //响应一个元素
            $obj = Model::find($_id);//如果没有查询到数据，响应一个404
            if (empty($obj)){
                return $this->response->errorNotFound();
            }
            return $this->response->item($obj,new Transformer());
        }else{
            //$members = Model::where('name', 'tom')->orderBy('name', 'desc')->paginate(5);
            //$objs = Model::orderBy('id', 'desc')->paginate(10);
            $ls = Model::where('pid', 0)
                ->orderBy('id', 'desc')
                //->take(10)
                ->get();
            //分页响应
            return $this->response->collection($ls,new Transformer());
        }
    }

    /**
     * 插入
     * @param Request $request
     * @return array|\Dingo\Api\Http\Response
     */
    public function save(Request $request){
        //数据完整性验证
        if (!$request->filled(['url','width','height','cid','md5'])) {
            return $this->response->errorBadRequest("'url','width','height','cid','md5' not is empty ");
        }
        $Model = new Model();
        $Model->url = $request->input('url');
        $Model->width = $request->input('width');
        $Model->height = $request->input('height');
        $Model->like_num = 0;
        $Model->cid = $request->input('cid');
        $Model->author = $request->input('author');
        $Model->md5= $request->input('md5','');
        $Model->tags= $request->input('tags','');
        $Model->save();
        //创建了资源的响应
        return $this->response->created();
    }

    /**
     * 更新
     * @param Request $request
     * @param null $_id
     * @return \Dingo\Api\Http\Response|void
     */
    public function update(Request $request,$_id = NULL){
        if (!empty($_id)){
            $arr = $request->all();
            if (empty($arr)){
                //return $this->response->errorBadRequest("update parameter not is empty");
                return $this->response->errorBadRequest();
            }
            $obj_model = Model::find($_id);
            if (empty($obj_model)){//处理没有找到资源时的响应
                return $this->response->errorNotFound();
            }
            $attr = ['url','width','height','cid','md5','author','tags'];//允许修改的属性
            foreach ($arr as $key=>$value){
                if (in_array($key,$attr)){
                    $obj_model->{$key} = $value;
                }
            }
            $obj_model->save();
            return $this->response->item($obj_model, new Transformer)->setStatusCode(201);
        }else{
            return $this->response->errorForbidden('id is empty');//一个服务器拒绝错误，第一个参数可以传递自定义消息。403
            //todo 处理参数错误的响应
            //Model::where('name', 'tom')->update(['delayed' => 1]);//按条件批量更新
            //todo 需要处理没有找到资源时的响应
        }
    }

    /**
     * 删除资源
     * @param $_id
     * 不安全但幂等,响应状态码
     * 200 (OK) - 删除成功，同时返回已经删除的资源
     * 202 (Accepted) - 删除请求已经接受，但没有被立即执行（资源也许已经被转移到了待删除区域）
     * 204 (No Content) - 删除请求已经被执行，但是没有返回资源（也许是请求删除不存在的资源造成的）
     * 301 （Moved Permanently）- 资源的URI已更改
     * 303 （See Other）- 其他，如负载均衡
     * 400 （bad request）- 指代坏请求（请求参数错误等）
     * 403 （Forbidden）表示用户得到授权（与401错误相对），但是访问是被禁止的。
     * 404 （not found）- 资源不存在
     * 409 （conflict）- 通用冲突
     * 500 （internal server error）- 通用错误响应
     * 503 （Service Unavailable）- 服务端当前无法处理请求
     * @return \Dingo\Api\Http\Response|void
     */
    public function delete($_id = NULL){
        if (!empty($_id)){
            $obj_model = Model::find($_id);
            if (empty($obj_model)){
                return $this->response->errorNotFound();
            }
            if ($obj_model->delete()){
                return $this->response->item($obj_model,new Transformer(),['xxx'=>'ooo']);
            }else{
                return $this->response->noContent();//204
            }

            /*$obj_model = Model::destroy($_id);
            return $this->response->noContent();//204*/
        }else{//todo 按条件删除多个资源时的处理
            return $this->response->errorForbidden('id is empty');//一个服务器拒绝错误，第一个参数可以传递自定义消息。403
            /*MembersModel::destroy(1);
            MembersModel::destroy([1, 2, 3]);
            MembersModel::destroy(1, 2, 3);*/
        }
    }

}